﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Academy.Numerics
{
    /// <summary>
    /// Defines methods to support arithmetic operations for objects.
    /// </summary>
    public interface IArithmeticOperator
    {
        /// <summary>
        /// Gets the result of adding the two specified values.
        /// </summary>
        /// <param name="left">The left operand for the addition operation.</param>
        /// <param name="right">The right operand for the addition operation.</param>
        /// <returns>The result of adding the two specified values.</returns>
        object Add(object left, object right);
        /// <summary>
        /// Gets the result of subtract the two specified values.
        /// </summary>
        /// <param name="left">The left operand. Represents the minuend in the operation.</param>
        /// <param name="right">The right operand. Represents the subtrahend in the operation.</param>
        /// <returns>The result of substract the left operand from the right operand.</returns>
        object Subtract(object left, object right);
        /// <summary>
        /// Gets the result of multiply the two specified values.
        /// </summary>
        /// <param name="left">The left operand. Represents the multiplicand in the operation.</param>
        /// <param name="right">The right operand. Represents the multiplier in the operation.</param>
        /// <returns>The result of multiply the left operand by the right operand.</returns>
        object Multiply(object left, object right);
        /// <summary>
        /// Gets the result of divide the two specified values.
        /// </summary>
        /// <param name="left">The left operand. Represents the dividend in the operation.</param>
        /// <param name="right">The right operand. Represents the divisor in the operation.</param>
        /// <returns>The result of divide the left operand by the right operand.</returns>
        object Divide(object left, object right);
        /// <summary>
        /// Gets the remainder value of divide the two specified values.
        /// </summary>
        /// <param name="left">he left operand. Represents the dividend in the operation.</param>
        /// <param name="right">The right operand. Represents the divisor in the operation.</param>
        /// <returns>The remainder value of divide the left operand by the right operand.</returns>
        object Mod(object left, object right);
    }
}